package _4_rpc教程

import "net/rpc"

// --------------服务端-------------------------
// 要求：服务端在注册rpc对象时，能让编译器检测出，注册对象是否合法
// 创建接口，在接口中定义方法原型
type MyInterface interface {
	HelloWord(string, *string) error
}

// 调用该方法时，需要给i传参，参数应该是实现了HelloWord方法的类对象
func RestService(i MyInterface) {
	rpc.RegisterName("Hello", i)
}

// ---------------客户端------------------
// 向调用本地函数一样，调用远程函数
// 定义类
type Myclient struct {
	c *rpc.Client
}

// 由于使用了c调用call，因此需要初始化c
func Initclient(addr string) Myclient {
	conn, _ := rpc.Dial("tcp", addr)
	return Myclient{c: conn}
}

// 实现函数，原型参照上面的Interface来实现
func (m Myclient) HelloWord(a string, b *string) error {
	return m.c.Call("Hello.HelloWord", a, &b)
}
